package com.lyx.crm.interceptor;

import com.lyx.crm.dao.UserMapper;
import com.lyx.crm.exceptions.NoLoginException;
import com.lyx.crm.utils.LoginUserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Package: com.lyx.crm.filter
 * @ClassName: NoLoginInterceptor
 * @Author: lyx
 * @CreateTime: 2021/7/20 12:03
 * @Description:
 */
public class NoLoginInterceptor extends HandlerInterceptorAdapter {


    @Autowired
    private UserMapper userMapper;
    /**
     *  拦截用户是否是登录状态
     *  在目标方法（目标资源） 执行前，执行的方法
     *
     *          方法返回值为波尔型
     *          如果返回true ，表示目标方法可以被执行
     *          如果返回false，表示阻止目标方法执行
     *
     *      如何判断登录状态
     *              1、判断cookie中是否存在用户信息，（获取用户ID）
     *              2、数据库是否存在指定用户ID的值
     *
     *      如果用户为登录状态，则允许目标方法执行，否则抛出未登录异常
     *
     *
     * @param request
     * @param response
     * @param handler
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //获取cookie用户id
        Integer userId = LoginUserUtil.releaseUserIdFromCookie(request);

        if(null == userId || userMapper.selectByPrimaryKey(userId) == null ){

            //抛出未登录异常
            throw new NoLoginException();
        }




        return true;
    }

}
